import axios, { AxiosError, AxiosRequestConfig, AxiosResponse } from 'axios';
// 定义通用的请求参数类型
interface RequestOptions extends AxiosRequestConfig {}

const instance = axios.create({
  baseURL: `${process.env.API_URL || ''}`,
  timeout: 60000  // 设置超时时间为 1 分钟,
});

// 添加响应拦截器
instance.interceptors.response.use(
  (response: AxiosResponse) => {
    // HTTP 状态码为 200 时直接返回数据
    return response;
  },
  (error: AxiosError) => {
    // HTTP 状态码不是 200 时的错误处理
    if (error.response) {
      // 从响应中获取错误信息
      const { status, data } = error.response;
      const errorMessage = (data as any)?.message || `请求失败，状态码: ${status}`;
      // 返回一个被拒绝的 Promise，携带错误信息
      return Promise.reject(new Error(errorMessage));
    } 
    // 处理网络错误或其他错误
    console.error('网络错误:', error.message);
    return Promise.reject(error);
  }
);
// 支持返回值类型泛型
const request = <T = any>(url: string, options: RequestOptions = {}): Promise<T> => {
  const { method = 'GET', params, data, headers, ...rest } = options;
  return instance.request<T>({
    url,
    method,
    params,
    data,
    headers,
    ...rest,
  }).then((res: AxiosResponse<T>) => res.data);
};

export default request;